/**
 *奇门遁甲固定数据
 */
import Dipan from '@/common/js/dipan.js';
import Tianpan from '@/common/js/tianpan.js';
import Renpan from '@/common/js/renpan.js';
//六甲，后两位分别是 空亡  、 旬首
const sexagenary = [
	['甲子', '乙丑', '丙寅', '丁卯', '戊辰', '己巳', '庚午', '辛未', '壬申', '癸酉', '戌亥', '戊'],
	['甲戌', '乙亥', '丙子', '丁丑', '戊寅', '己卯', '庚辰', '辛巳', '壬午', '癸未', '申酉', '己'],
	['甲申', '乙酉', '丙戌', '丁亥', '戊子', '己丑', '庚寅', '辛卯', '壬辰', '癸巳', '午未', '庚'],
	['甲午', '乙未', '丙申', '丁酉', '戊戌', '己亥', '庚子', '辛丑', '壬寅', '癸卯', '辰巳', '辛'],
	['甲辰', '乙巳', '丙午', '丁未', '戊申', '己酉', '庚戌', '辛亥', '壬子', '癸丑', '寅卯', '壬'],
	['甲寅', '乙卯', '丙辰', '丁巳', '戊午', '己未', '庚申', '辛酉', '壬戌', '癸亥', '子丑', '癸']

];

//二十四节气定局数以及阴阳遁
//二十四节气按  阴阳遁来分
// const innings = [
// 	['阳遁','冬至','小寒','大寒','立春','雨水','惊蛰','春分','清明','谷雨','立夏','小满','芒种'],
// 	['阴遁','夏至','小暑','大暑','立秋','处暑','白露','秋分','寒露','霜降','立冬','小雪','大雪']
// ]
const innings = [
	//阳遁
	['冬至', '阳遁', 1, 7, 4],
	['小寒', '阳遁', 2, 8, 5],
	['大寒', '阳遁', 3, 9, 6],
	['立春', '阳遁', 8, 5, 2],
	['雨水', '阳遁', 9, 6, 3],
	['惊蛰', '阳遁', 1, 7, 4],
	['春分', '阳遁', 3, 9, 6],
	['清明', '阳遁', 4, 1, 7],
	['谷雨', '阳遁', 5, 2, 8],
	['立夏', '阳遁', 4, 1, 7],
	['小满', '阳遁', 5, 2, 8],
	['芒种', '阳遁', 6, 3, 9],
	//阴遁
	['夏至', '阴遁', 9, 3, 6],
	['小暑', '阴遁', 8, 2, 5],
	['大暑', '阴遁', 7, 1, 4],
	['立秋', '阴遁', 2, 5, 8],
	['处暑', '阴遁', 1, 4, 7],
	['白露', '阴遁', 9, 3, 6],
	['秋分', '阴遁', 7, 1, 4],
	['寒露', '阴遁', 6, 9, 3],
	['霜降', '阴遁', 5, 8, 2],
	['立冬', '阴遁', 6, 9, 3],
	['小雪', '阴遁', 5, 8, 2],
	['大雪', '阴遁', 4, 7, 1]
];

//六仪三奇（固定)
const yiqi = ['戊', '己', '庚', '辛', '壬', '癸', '丁', '丙', '乙'];

//八门（九门)
const gates = ['休门', '死门', '伤门', '杜门', '黄门', '开门', '惊门', '生门', '景门'];

//九星
const star = ['天蓬', '天芮', '天冲', '天辅', '天禽', '天心', '天柱', '天任', '天英'];

//九神（阳)
const Yanggod = ['值符', '螣蛇', '太阴', '六合', '勾陈', '太常', '朱雀', '九地', '九天'];
//九神（阴)
const Yingod = ['值符', '螣蛇', '太阴', '六合', '白虎', '太常', '玄武', '九地', '九天'];

/** 元旦盘
 *  【辅 4 杜】   【英 9 景】  【芮 2 死】
 * 
 * 
 * 
 * 
 *  【冲 3 震】   【禽 5 黄】  【柱 7 惊】
 * 
 * 
 * 
 *  【任 8 生】   【蓬 1 休】  【心 6 开】
 */

const initP = [
	['天蓬', '休门'], //1
	['天芮', '死门'], //2
	['天冲', '伤门'], //3
	['天辅', '杜门'], //4
	['天禽', '黄门'], //5
	['天心', '开门'], //6
	['天柱', '惊门'], //7
	['天任', '生门'], //8
	['天英', '景门'] //9
];

//此函数为根据  干支  获取相对应的  空亡 以及  旬首
//a为干支

// const layout = {
// 	getdata: function getdate() {
// 		let index = sexagenary.findIndex(function(value, index, sexagenary) {
// 			if (value == '丙寅') {
// 				console.log("存在", index)
// 				return index;
// 			}
// 		})
// 		return index;
// 	}
const layout = {
	/**
	 * 
	 * @param {string} searchWord 
	 * @returns number -1时表示未找到，其他值表示对应数组的下标
	 */
	getdata: function getdate(searchWord) {
		const row = sexagenary.find(i => i.some(j => j === searchWord));
		return row && row[0]
		// return sexagenary.findIndex(i=> i.some(j=> j===searchWord));
	},

	/**  空亡
	 * 
	 * @param {string} searchWord 
	 * @returns 返回所需要的值
	 */
	getEmpdeath: function getEmpdeath(searchWord) {
		const row = sexagenary.find(i => i.some(j => j === searchWord));
		return row && row[row.length - 2]
	},

	/**  旬首
	 * 
	 * @param {string} searchWord 
	 * @returns 返回所需要的值
	 */
	getXunshou: function getXunshou(searchWord) {
		const row = sexagenary.find(i => i.some(j => j === searchWord));
		return row && row[row.length - 1]
	},

	/**
	 * 根据传参获取阴阳遁
	 * @param {string} searchWord 
	 * @returns number -1时表示未找到，其他值表示对应数组的下标
	 */
	getYinyang: function getYinyang(searchWord) {
		const row = innings.find(i => i.some(j => j === searchWord));
		return row && row[1]
		// return sexagenary.findIndex(i=> i.some(j=> j===searchWord));
		// if (num < 5) {
		// 	return [row[1] + row[2]]
		// } else if (4 < num < 10) {
		// 	return row[1] + row[3]
		// } else {
		// 	return row[1] + row[4]
		// }
	},

	/**
	 * 根据传参获取局数
	 * @param {string} jq  节气
	 * @param {string} num  第几天
	 * @returns number -1时表示未找到，其他值表示对应数组的下标
	 */
	getinnings: function getinnings(jq, num) {
		const row = innings.find(i => i.some(j => j === jq));
		return row[num];
		
		// if (num >= 10) {
		// 	return row[4]
		// } else if (num < 6) {
		// 	return row[2]
		// } else {
		// 	return row[3]	
		// }
	},

	/**  地盘干
	 *   根据局数获取 地盘干
	 *  
	 *   @param {number} num 局数
	 */
	getDdry: function getDdry(num) {
		let dry = yiqi.slice(10 - num).concat(yiqi.slice(0, 10 - num));
		return dry;
	},

	/**  根据数据获取 对应的下标
	 *   @param   {Array} arr  数组
	 *   @param   {String} searchWord 查询的元素
	 * 	 @returns number -1时表示未找到，其他值表示对应数组的下标
	 */

	getRow: function getRow(arr, searchWord) {
		var row = arr.findIndex((value) => value === searchWord);
		return row;
	},

	/**
	 *   根据日柱查询其对应的六甲  
	*/
	getRdrysexagenary:function getRdrysexagenary(searchWord){
		const row = sexagenary.find(i => i.some(j => j === searchWord));
		return row;
	},
	
	/**
	 *   定局：根据  日柱  找  符头,定上中下三元
	 *        (根据日柱逆推 遇到第一个甲、己就是符头)
	 * 
	 */
	getYuan : function getYuan(rdry){
		// 定局：根据  日柱  找  符头(根据日柱逆推 遇到第一个甲、己就是符头)
		// 初始化符头
		let futou;
		//1、根据  日柱  获取对应的六甲
		let Sexa = this.getRdrysexagenary(rdry);
		console.log(Sexa);
		//2、获取  日柱  是其六甲中的第几个
		let Rnum = this.getRow(Sexa,rdry);
		console.log('Rnum:'+Rnum);
		
		//3、获取 符头
		if(Rnum<5){
			futou = Sexa[0];
		}else{
			futou = Sexa[5];
		}
		
		//4、凡是甲、己配地支子午卯酉是上元，寅申已亥是中元，辰戌丑未是下元。
		//初始化上中下元
		let Ynum;
		if(futou.slice(1) == '子' ||futou.slice(1) == '午'||futou.slice(1) == '卯'||futou.slice(1) == '酉'){
			Ynum = 2;
		}else if(futou.slice(1) == '寅' ||futou.slice(1) == '申'||futou.slice(1) == '巳'||futou.slice(1) == '亥'){
			Ynum = 3;
		}else{
			Ynum = 4;
		}
		return Ynum;
	},

	/**  奇门起局
	 *   落于  旬首 与 地盘干  的宫位 
	 *  @param {string} searchWord 时柱的干支
	 * 	@param {string} jq  节气
	 *  @param {string} num        与节气相差的天数 
	 *  
	 */
	getQobject: function getQobject(searchWord, jq, num,rdry) {
		
		// 1、根据 日柱 定 上中下 三元
		let Ynum = this.getYuan(rdry);
		console.log("元数："+Ynum);
		
		// 2、定局数
		let ins1 = this.getinnings(jq, Ynum); //局数
		
		//六甲
		let data1 = this.getdata(searchWord);
		const Datarow = sexagenary.find(i => i.some(j => j === searchWord));
		const Datarow1 = Datarow.slice(0, 9);
		//旬首
		let xunshou1 = this.getXunshou(searchWord);
		console.log('xunshou1:'+xunshou1)
		//查询旬首在yiqi中对应的位置
		let Xnum = this.getRow(yiqi, xunshou1);
		console.log('Xnum:'+Xnum);
		//阴阳遁
		let Yinyang1 = this.getYinyang(jq);
		
		//获取时柱天干
		let Sdry = searchWord.slice(0, 1);
		
		//初始化 '时干' 与  '地盘干' 对应的宫位
		let Tnum;
		//初始化旬首 按照六仪三奇的排列顺序
		let initS;
		//时干支在地盘暗干支的宫位
		let Tbnum;
		
		//1、地盘
			//1）地盘干
				let Ddry = Dipan.getdipangan(ins1,Yinyang1);
				console.log('Ddry:'+Ddry)
		
			//查询旬首 在地盘干 中对应的宫位-1
				let Num2 = Dipan.getXunshounum(Ddry, xunshou1);
				console.log("Num2:"+Num2);
				
			//值符使  根据局数获取原始的值符使
			let Ysymbol = initP[Num2][0];
			let Ystarnum = this.getRow(star,Ysymbol);
			
			//值使门
			let Ymen = initP[Num2][1];
			let Ygatesnum =this.getRow(gates,Ymen) ;
			
			//暗值使门
			let BDmen = initP[8-Num2][1];
			let BDgatesnum =this.getRow(gates,BDmen);
			console.log('Bdmen:'+BDmen)
			
			//2）地盘九神
				let Dgod = Dipan.getJiushen(Yinyang1,Num2);
			
			//3）地盘暗干支
				let BDdry = Dipan.getBganzhi(Yinyang1,Datarow1,Num2);
				console.log('BDdry：'+BDdry);
		
		//2、天盘
			//'时干' 与  '地盘干' 对应的宫位
				Tnum = this.getRow(Ddry, Sdry);
			//若时干为 '甲' 在 "地盘干"中找不到，则要明了  '甲癸'  同宫位
				Tbnum = this.getRow(Ddry, '癸');
				if (Tnum === -1) {
					Tnum = Tbnum;
				}
				console.log("Tnum:"+Tnum)
			//1) 天盘九星
				let Tstar = Tianpan.getTjiuxing(Yinyang1,Ystarnum,Tnum);
				console.log("Tstar:"+Tstar)
			
			//2) 天盘干
				let Tdry = Tianpan.getTdry(Yinyang1,Xnum,Tnum);
				console.log('Tdry:' + Tdry);
				
			//3) 天盘九神
				let Tgod = Tianpan.getTjiushen(Yinyang1,Tnum);
				console.log("Tgod:"+Tgod);
				
			//4)天盘暗干支
				let TDdry = Tianpan.getTDganzhi(Yinyang1,Datarow1,Tnum);
				console.log("TDdry:"+TDdry);
		
		// 3、人盘
			//時柱在地盤暗幹支對應的宮位
				let BDnum;
			//優先考慮時幹為 '癸'的時候，因為地盤暗幹支不存在，故而使用 '甲癸' 同宮
				if(Sdry === '癸'){
					BDnum = Num2;
				}else{
					//获取 时干支 与 '地盘暗干支' 对应的宫位
					BDnum = this.getRow(BDdry,searchWord);
				}
			console.log('BDnum:'+ BDnum)
			//如果不存在  则为旬首所在的宫位
				// if (Tnum === -1) {
				// 	BDnum = Num2;
				// }
			
			// 1、明使九门
				let Rmen =  Renpan.getMzhishimen(Yinyang1,Ygatesnum,BDnum); 
				console.log("Rmen:"+Rmen)
				
			// 2、暗使九门
				let BRmen = Renpan.getDzhishimen(Yinyang1,BDgatesnum,BDnum);
				console.log("BRmen:"+BRmen)
				
			// 3、人盘暗干支
				let RBdry = Renpan.getRDganzhi(Yinyang1,Datarow1,BDnum);
				console.log("RBdry:"+RBdry);
			
		//输出参数
		const json = {"Jushu":ins1,
					  "Yanganzhi":data1,
					  "XunS":xunshou1,
					  "Yyd":Yinyang1,
					  "Yzf":Ysymbol,
					  "Yzm":Ymen,
					  "BDmen":BDmen,
					  "Ddry":Ddry,
					  "BDdry":BDdry,
					  "Dgod":Dgod,
					  "Tdry":Tdry,
					  "Tstar":Tstar,
					  "Tgod":Tgod,
					  "Rmen":Rmen,
					  "BRmen":BRmen,
					  "TDdry":TDdry,
					  "RBdry":RBdry
					}
		return json;
	}


};
export default layout;